from pydub import AudioSegment
from utils.log import logger
import shutil
import os
import ffmpeg


def remove_extension(filename):
    """
    用户上传带有后缀的音频，此方法去除后缀
    :param filename: 文件名
    :return: 去除后缀的文件名
    """

    # 找到最后一个小数点的位置
    dot_index = filename.rfind('.')
    # 如果找到了小数点，返回去掉后缀的部分
    if dot_index != -1:
        return filename[:dot_index]
    # 如果没有小数点，返回原始文件名
    return filename


def get_duration_pydub(file_path):
    """
    获取音频时长
    :param file_path: 音频文件路径
    :return: 音频时长（秒）
    """

    try:
        audio_file = AudioSegment.from_file(file_path)
        duration = audio_file.duration_seconds
        return int(duration)
    except Exception as e:
        logger.error(f"Error in getting duration for {file_path}: {e}")
        raise e


# file_path = r"C:\研究生\研究生所学知识技术\实验室项目\智能出题\PPT生成视频DEMO\resources\audio\电力行业PPT\电力行业PPT_1.wav"
# res = get_duration_pydub(file_path)
# print(res)


def get_video_duration(file_path):
    """
    拿到视频的时长
    :param file_path: 文件路径
    :return: 时长
    """
    try:
        probe = ffmpeg.probe(file_path)
        duration = float(probe['format']['duration'])
        return int(duration)
    except Exception as e:
        print(f"Error getting video duration: {e}")
        return None


# res = get_video_duration(r"C:\研究生\研究生所学知识技术\实验室项目\智能出题\PPT生成视频DEMO\resources\video\ppt模板命名规范.mp4")
# print(res)

def delete_folder(folder_path):
    """
    删除整个文件夹，包括文件夹下的文件和文件夹本身
    :param folder_path:
    :return:
    """
    logger.info(f"开始删除整个文件夹，文件目录为：{folder_path}")
    if os.path.exists(folder_path):
        try:
            shutil.rmtree(folder_path)
            logger.info(f"已删除整个文件夹：{folder_path}")
        except Exception as e:
            logger.info(f"删除失败：{e}")
    else:
        logger.info("指定的文件夹路径不存在")


# # 示例用法：替换为你要删除的文件夹路径
# delete_folder(r"C:\研究生\研究生所学知识技术\实验室项目\智能出题\PPT生成视频DEMO\resources\picture\电力行业PPT")


def delete_file(folder_path):
    """
    删除文件夹下的所有文件
    :param folder_path:文件夹路径
    :return: None
    """
    logger.info(f"开始删除文件夹下的文件，文件目录为：{folder_path}")
    for filename in os.listdir(folder_path):
        file_path = os.path.join(folder_path, f"{filename}.mp4")
        if os.path.isfile(file_path):  # 只删除文件，不删除子文件夹
            try:
                os.remove(file_path)
            except Exception as e:
                logger.info(f"删除失败：{e}")
        else:
            logger.info("指定的文件路径不存在")
